/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fr.sorbonne.inf5.yams.model;

import fr.sorbonne.inf5.yams.exceptions.DeNotRunException;
import java.util.ArrayList;
import java.util.List;

/**
 * Cette classe représente un Dé à jouer. Son nombre de face est définit par le
 * constructeur
 * @author Oukherfellah Riad
 * @author Dubos Romain
 */
public class De {

    private List<InterfaceFace> faces;
    private InterfaceFace faceCourante;

    /**
     * Crée un nouveau dé sans face et met la valeur courant du dé à null
     */
    public De(){
        this.faces = new ArrayList<InterfaceFace>();
        this.faceCourante = null;
    }

    /**
     * Crée un nouveau dé avec comme face les faces de la list en paramètre
     * @param faces list de face qui seront attribué au dé
     */
    public De(List<InterfaceFace> faces){
        this();
        this.faces.addAll(faces);
    }

    /**
     * Remplace les faces du dé par les faces de la list en paramètre
     * @param faces représente la liste des faces qui vont être attribué au dé
     */
    public void setFaces(List<InterfaceFace> faces){
        this.faces.clear();
        this.faces.addAll(faces);
    }

    /**
     * Renvoie la dernière valeur suite à un lancé de dé
     * @return La IFace du dernier lancé lève une exception sinon
     * @throws DeNotRunException Si le dé n'a jamais été lancé
     */
    public InterfaceFace getFaceCourante() throws DeNotRunException{
        if(this.faceCourante != null){
            return this.faceCourante;
        }
        throw new DeNotRunException();
    }

    /**
     * Renvoie une des faces du dé aléatoirement et la met en tant que face courrante
     * @return la IFace qui a été tirer au sort aléatoirement
     */
    public De lancerDe(){
        int size = this.faces.size();
        int indRandom = (int)(1+size*Math.random())-1;
        this.faceCourante = this.faces.get(indRandom);
        return this;
    }

    /**
     * Réinitialise la valeurCourante de la face
     */
    public void reinitialiterDe(){
        this.faceCourante = null;
    }

    

}
